import { defineStore } from 'pinia';
import { ref } from 'vue';
// import { getUserInfo } from '@/api/api';

// 前端开发人员手动配置局部需要用到的菜单数据
import { dynamicMenuTree } from './staticRoutes';
// 模拟menuTree 数据  可以删除
import generateMenuTree from './menuData';

interface DynamicObject {
  [key: string]: any;
}

const mergeMenuTree = (
  staticMenuTree: Array<DynamicObject>,
  dynamicMenuTree: Array<DynamicObject> = []
) => {
  dynamicMenuTree.forEach((dynamicMenu) => {
    const staticMenu = staticMenuTree.find((sm) => sm.url === dynamicMenu.url);
    if (staticMenu) {
      if (dynamicMenu?.children) {
        mergeMenuTree(staticMenu.children, dynamicMenu.children);
      } else {
        Object.assign(staticMenu, dynamicMenu);
      }
    }
  });
};

export const useUserInfoStore = defineStore('UserInfo', () => {
  const userInfo = ref(null);
  const menuTree = ref<Array<DynamicObject>>([]);

  function setUserInfo() {
    return new Promise((resolve) => {
      // 为了演示效果 暂时注释掉获取用户信心接口，采用模拟，如果真正用于项目开发，请把注释打开
      // getUserInfo()
      //   .then((res: DynamicObject) => {
      //     if (res.code === '200') {
      //       // 模拟menuTree菜单 和路由
      //       // generateMenuTree(res.data.menuTree);

      //       如果某些页面需要开发人员配置，dynamicMenuTree 就是动态菜单配置项，包括配置页面缓存，编辑 详情页菜单高亮，动态路由params
      // mergeMenuTree(res.data.menuTree ?? [], dynamicMenuTree)

      //       userInfo.value = res.data;
      //       menuTree.value = res.data?.menuTree ?? [];
      //       resolve(userInfo.value);
      //     }
      //   })
      //   .catch((err) => {
      //     console.log(err);
      //     reject(err);
      //   });

      // 模拟menuTree菜单 和路由  这段真实开发中可以删除掉
      const res = {
        menuTree: []
      };
      // 生成菜单
      generateMenuTree(res.menuTree);
      // 前端字段配置合成到res.menuTree中 此项是由前端开发人员确定，避免业务人员多增不需要了解的配置操作
      mergeMenuTree(res.menuTree, dynamicMenuTree);
      userInfo.value = res as any;
      menuTree.value = res.menuTree;
      resolve(userInfo.value);
    });
  }
  return {
    userInfo,
    setUserInfo,
    menuTree
  };
});
